#include <iostream>
using namespace std;

#include <cstddef>  // 包含size_t的定义

// 判断UTF-8字符的字节数（假设输入为UTF-8编码的首个字节）
size_t nBytesCode(const char ch) {
    // 如果最高位为0（0xxxxxxx），是ASCII字符，占1字节
    if (!(ch & (1 << 7))) {
        return 1;
    }
    
    // 最高位为1，进入多字节判断（1xxxxxxx）
    int nBytes = 1;  // 记录字节数，初始为1（当前字节）
    // 从次高位开始判断连续的1的个数（UTF-8用前n位1标识字节数）
    for (int idx = 0; idx < 6; ++idx) {  // UTF-8最多6字节（实际标准中最多4字节）
        // 检查从高位到低位的第(6 - idx)位是否为1
        if (ch & (1 << (6 - idx))) {
            nBytes++;  // 每多一个连续的1，字节数+1
        } else {
            break;  // 遇到0则停止计数
        }
    }
    
    // 根据UTF-8标准，有效字节数范围为1-4（这里限制合理范围，避免异常值）
    return (nBytes >= 1 && nBytes <= 4) ? nBytes : 1;
}

int main(){
    string str("hello世界nihao");
    for(size_t i=0; i<str.size();){
        if ((str[i] & 0x80) == 0){
            cout << "english ch = " << str.substr(i, 1) << "\n";
            ++i;
        } else{
            cout << "chinese ch = " << str.substr(i, 3) << "\n";
            i += 3;
        }
    }

    return 0;
}